lib/repo: Do account for size with prune --no-prune
authorColin Walters <walters@verbum.org>
Mon, 5 Mar 2018 15:56:45 +0000 (10:56 -0500)
committerAtomic Bot <atomic-devel@projectatomic.io>
Mon, 5 Mar 2018 16:58:12 +0000 (16:58 +0000)
I think this got changed in a refactor.  We definitely want
to total up the amount of space that *would* be freed even
with `--no-prune` AKA `OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE`.

It's actually a bit terrifying this is apparently the first test case for
the `--no-prune` option...

Closes: https://github.com/ostreedev/ostree/issues/1480
Closes: #1483
Approved by: jlebon

src/libostree/ostree-repo-prune.c
tests/test-prune.sh

index fc3cfa548ee58f070678ef381a6933070ea59fdc..c8a178ec27b432a5369c449c70f714f7c76ef9e8 100644 (file)
@@ -52,28 +52,31 @@ maybe_prune_loose_object (OtPruneData        *data,
 
   if (!g_hash_table_lookup_extended (data->reachable, key, NULL, NULL))
     {
+      guint64 storage_size = 0;
+
       g_debug ("Pruning unneeded object %s.%s", checksum,
                ostree_object_type_to_string (objtype));
+
+      if (!ostree_repo_query_object_storage_size (data->repo, objtype, checksum,
+                                                  &storage_size, cancellable, error))
+        return FALSE;
+
+      data->freed_bytes += storage_size;
+
       if (!(flags & OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE))
         {
-          guint64 storage_size = 0;
-
           if (objtype == OSTREE_OBJECT_TYPE_COMMIT)
             {
               if (!ostree_repo_mark_commit_partial (data->repo, checksum, FALSE, error))
                 return FALSE;
             }
 
-          if (!ostree_repo_query_object_storage_size (data->repo, objtype, checksum,
-                                                      &storage_size, cancellable, error))
-            return FALSE;
-
           if (!ostree_repo_delete_object (data->repo, objtype, checksum,
                                           cancellable, error))
             return FALSE;
 
-          data->freed_bytes += storage_size;
         }
+
       if (OSTREE_OBJECT_TYPE_IS_META (objtype))
         data->n_unreachable_meta++;
       else
index 0f0832215fde7a4eeae8bc143533f1e59852cd67..7de372c8a0fdd63bebc3f58703114d4cc2feee13 100755 (executable)
@@ -52,6 +52,13 @@ assert_repo_has_n_commits() {
     assert_streq "$(find ${repo}/objects -name '*.commit' | wc -l)" "${count}"
 }
 
+# Test --no-prune
+objectcount_orig=$(find repo/objects | wc -l)
+${CMD_PREFIX} ostree prune --repo=repo --refs-only --depth=0 --no-prune | tee noprune.txt
+assert_file_has_content noprune.txt 'Would delete: [1-9][0-9]* objects, freeing [1-9][0-9]*'
+objectcount_new=$(find repo/objects | wc -l)
+assert_streq "${objectcount_orig}" "${objectcount_new}"
+
 ${CMD_PREFIX} ostree prune --repo=repo --refs-only --depth=2 -v
 assert_repo_has_n_commits repo 3
 find repo/objects -name '*.tombstone-commit' | wc -l > tombstonecommitcount